home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / gfx / 3d / irit50src.lha / irit5 / scripts / prisanim.irt < prev    next >
Encoding:
Text File  |  1994-12-11  |  8.8 KB  |  261 lines

  1. #
  2. # Some tests for the PRISA (planar layout) code.
  3. #
  4.  
  5. save_res = resolution;
  6. save_mat = view_mat;
  7. SampPerCrv = 64;
  8. viewobj(view_mat);
  9.  
  10. ViewState("LessIso");
  11. ViewState("LessIso");
  12.  
  13. #############################################################################
  14. #
  15. # Layout (prisa) of a sphere - several resolutions/directions.
  16. #
  17. view_mat3d = rotx(-90) * roty(135) * rotx(-30) * scale(vector(0.5, 0.5, 0.5));
  18. view_mat2d = scale( vector( 0.15,  0.15, 0.15 ) ) *
  19.          trans( vector( 0.0, -0.8, 0.0 ) );
  20.  
  21. s45 = sin(pi/4);
  22.  
  23. halfcirc = cbspline( 3,
  24.              list( ctlpt( P3, 1.0,  0.0, 0.0,  1.0 ),
  25.                    ctlpt( P3, s45, -s45, 0.0,  s45 ),
  26.                    ctlpt( P3, 1.0, -1.0, 0.0,  0.0 ),
  27.                    ctlpt( P3, s45, -s45, 0.0, -s45 ),
  28.                ctlpt( P3, 1.0,  0.0, 0.0, -1.0 ) ),
  29.              list( 0, 0, 0, 1, 1, 2, 2, 2 ) );
  30. sp = surfrev( halfcirc );
  31. color( sp, yellow );
  32.  
  33. interact( list( view_mat3d, sp ) );
  34.  
  35. sp_prisa = prisa( sp, SampPerCrv, -0.6, COL, vector( 0, 0.1, 0.0 ) );
  36. color( sp_prisa, yellow );
  37. interact( list( view_mat3d, sp_prisa ) );
  38.  
  39. sp_prisa = prisa( sp, SampPerCrv, 0.6, COL, vector( 0, 0.1, 0.0 ) );
  40. interact( list( view_mat2d, sp_prisa ) );
  41.  
  42. sp_prisa = prisa( sp, SampPerCrv, -0.3, COL, vector( 0, 0.1, 0.0 ) );
  43. color( sp_prisa, yellow );
  44. interact( list( view_mat3d, sp_prisa ) );
  45.  
  46. sp_prisa = prisa( sp, SampPerCrv, 0.3, COL, vector( 0, 0.1, 0.0 ) );
  47. interact( list( view_mat2d, sp_prisa ) );
  48.  
  49. sp_prisa = prisa( sp, SampPerCrv, -0.1, COL, vector( 0, 0.1, 0.0 ) );
  50. color( sp_prisa, yellow );
  51. interact( list( view_mat3d, sp_prisa ) );
  52.  
  53. sp_prisa = prisa( sp, SampPerCrv, 0.1, COL, vector( 0, 0.1, 0.0 ) );
  54. interact( list( view_mat2d, sp_prisa ) );
  55.  
  56. sp_prisa = prisa( sp, SampPerCrv, -0.3, ROW, vector( 0, 0.1, 0.0 ) );
  57. color( sp_prisa, yellow );
  58. interact( list( view_mat3d, sp_prisa ) );
  59.  
  60. sp_prisa = prisa( sp, SampPerCrv, 0.3, ROW, vector( 0, 0.1, 0.0 ) );
  61. interact( list( view_mat2d, sp_prisa ) );
  62.  
  63. #############################################################################
  64. #
  65. # Layout (prisa) of a wine glass.
  66. #
  67. view_mat3d = rotx(-90) * roty(130) * rotx(-35) *
  68.         scale(vector(0.5, 0.5, 0.5)) * trans(vector(0.0, -0.5, 0.0));
  69. view_mat2d = scale( vector( 0.1,  0.1, 0.1 ) ) *
  70.          trans( vector( 0.0, -0.8, 0.0 ) );
  71.  
  72. cross = cbspline( 3,
  73.           list( ctlpt( E3, 0.7, 0.0, 0. ),
  74.             ctlpt( E3, 0.7, 0.0, 0.06 ),
  75.             ctlpt( E3, 0.1, 0.0, 0.1 ),
  76.             ctlpt( E3, 0.1, 0.0, 0.6 ),
  77.             ctlpt( E3, 0.6, 0.0, 0.6 ),
  78.             ctlpt( E3, 0.8, 0.0, 0.8 ),
  79.             ctlpt( E3, 0.8, 0.0, 1.4 ),
  80.             ctlpt( E3, 0.6, 0.0, 1.6 ) ),
  81.           list( KV_OPEN ) );
  82. wglass = surfprev( cross * scale( vector( 1.6, 1.6, 1.6 ) ) );
  83. color( wglass, yellow );
  84.  
  85. interact( list( view_mat3d, wglass ) );
  86.  
  87. wgl_prisa = prisa( wglass, SampPerCrv, -0.1, COL, vector( 0, 0.25, 0.0 ) );
  88. color( wgl_prisa, yellow );
  89. interact( list( view_mat3d, wgl_prisa ) );
  90.  
  91. wgl_prisa = prisa( wglass, SampPerCrv, 0.1, COL, vector( 0, 0.25, 0.0 ) );
  92. interact( list( view_mat2d, wgl_prisa ) );
  93.  
  94. # Animate:
  95.  
  96. wgl_prisa3d = prisa( wglass, SampPerCrv, -0.1, COL, vector( 0, 0.25, 0.0 ) );
  97. color( wgl_prisa3d, magenta );
  98.  
  99. wgl_prisa2d = prisa( wglass, SampPerCrv, 0.1, COL, vector( 0, 0, 0 ) ) *
  100.         scale( vector( 0.8, 0.8, 0.8 ) ) *
  101.         trans( vector( 0, -5, 5.5 ) );
  102. color( wgl_prisa2d, red );
  103.  
  104. view_mat3d = rotx(-90) * roty(130) * rotx(-35) *
  105.         scale(vector(0.2, 0.2, 0.2)) * trans(vector(0.0, -0.5, 0.0));
  106.  
  107. built_gl = nil();
  108. iter_gl = nil();
  109. morph_step = 0.2;
  110. ViewState("LessIso");
  111. ViewState("LessIso");
  112. view( list( view_mat3d, wgl_prisa2d, wgl_prisa3d ), on );
  113. for ( i = 1, 1, sizeof( wgl_prisa3d ),
  114.     min_gl = nth( wgl_prisa2d, 1 + sizeof( wgl_prisa3d ) - i ):
  115.     max_gl = nth( wgl_prisa3d, i ):
  116.     ffcompat( min_gl, max_gl ):
  117.     for ( t = 0.0, morph_step, 1.0,
  118.     iter_gl = smorph( min_gl, max_gl, t ):
  119.     color( iter_gl, yellow ):
  120.     viewobj( iter_gl ) ):
  121.     snoc( max_gl, built_gl ):
  122.     color( built_gl, white ):
  123.     view( list( wgl_prisa2d, wgl_prisa3d, built_gl ), on ) );
  124. viewclear();
  125. ViewState("MoreIso");
  126. ViewState("MoreIso");
  127.  
  128. #############################################################################
  129. #
  130. # Layout (prisa) Fuselage of b58 model.
  131. #
  132. c1 = circle( vector( 0.0, 0.0, 0.0 ), 0.01 ) *
  133.      roty( 90 ) *
  134.      trans( vector( -1.0, 0.0, 0.1 ) );
  135. c2 = circle( vector( 0.0, 0.0, 0.0 ), 0.025 ) *
  136.      roty( 90 ) *
  137.      trans( vector( 0.0, 0.0, 0.1 ) );
  138. c3 = circle( vector( 0.0, 0.0, 0.0 ), 0.03 ) *
  139.      roty( 90 ) *
  140.      trans( vector( 0.1, 0.0, 0.1 ) );
  141. c4 = cbspline( 3,
  142.            list( ctlpt( P3, 1,     2.5,   0.0,   -0.1 ),
  143.              ctlpt( P3, 0.707, 1.77,  0.283, -0.071 ),
  144.              ctlpt( P3, 1,     2.5,   0.4,    0.0 ),
  145.              ctlpt( P3, 0.707, 1.77,  0.283,  0.283 ),
  146.              ctlpt( P3, 1,     2.5,   0.0,    0.4 ),
  147.              ctlpt( P3, 0.707, 1.77, -0.283,  0.283 ),
  148.              ctlpt( P3, 1,     2.5,  -0.4,    0.0 ),
  149.              ctlpt( P3, 0.707, 1.77, -0.283, -0.071 ),
  150.              ctlpt( P3, 1,     2.5,   0.0,   -0.1 ) ),
  151.            list( 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4 ) ) *
  152.      trans( vector( -1.5, 0.0, 0.0 ) );
  153. c5 = cbspline( 3,
  154.            list( ctlpt( P3, 1,     2.5,   0.0,   -0.1 ),
  155.              ctlpt( P3, 0.707, 1.77,  0.283, -0.071 ),
  156.              ctlpt( P3, 1,     2.5,   0.4,    0.0 ),
  157.              ctlpt( P3, 0.707, 1.77,  0.283,  0.6 ),
  158.              ctlpt( P3, 1,     2.5,   0.0,    0.5 ),
  159.              ctlpt( P3, 0.707, 1.77, -0.283,  0.6 ),
  160.              ctlpt( P3, 1,     2.5,  -0.4,    0.0 ),
  161.              ctlpt( P3, 0.707, 1.77, -0.283, -0.071 ),
  162.              ctlpt( P3, 1,     2.5,   0.0,   -0.1 ) ),
  163.            list( 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4 ) ) *
  164.      trans( vector( 0.0, 0.0, 0.0 ) );
  165.  
  166. fuseFront = sFromCrvs( list( c1, c2, c3, c4, c5 ), 3 );
  167. color( fuseFront, yellow );
  168.  
  169. c1 = cbspline( 3,
  170.            list( ctlpt( P3, 1,     2.5,   0.0,   -0.1 ),
  171.              ctlpt( P3, 0.707, 1.77,  0.283, -0.071 ),
  172.              ctlpt( P3, 1,     2.5,   0.4,    0.0 ),
  173.              ctlpt( P3, 0.707, 1.77,  0.283,  0.566 ),
  174.              ctlpt( P3, 1,     2.5,   0.0,    0.8 ),
  175.              ctlpt( P3, 0.707, 1.77, -0.283,  0.566 ),
  176.              ctlpt( P3, 1,     2.5,  -0.4,    0.0 ),
  177.              ctlpt( P3, 0.707, 1.77, -0.283, -0.071 ),
  178.              ctlpt( P3, 1,     2.5,   0.0,   -0.1 ) ),
  179.            list( 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4 ) ) *
  180.      trans( vector( 0.0, 0.0, 0.0 ) );
  181. c2 = c1 * scale( vector( 1.05, 1.05, 1.05 ) ) *
  182.           trans( vector( 0.3, 0.0, 0.0 ) );
  183. c3 = c1 * scale( vector( 0.95, 0.95, 0.95 ) ) *
  184.       trans( vector( 1.7, 0.0, -0.02 ) );
  185. c4 = circle( vector( 0.0, 0.0, 0.0 ), 0.35 ) *
  186.      roty( 90 ) *
  187.      trans( vector( 5.0, 0.0, 0.2 ) );
  188. c5 = c4 * trans( vector( 0.2, 0.0, 0.0 ) );
  189. c6 = circle( vector( 0.0, 0.0, 0.0 ), 0.3 ) *
  190.      roty( 90 ) *
  191.      trans( vector( 10.5, 0.0, 0.2 ) );
  192. c7 = circle( vector( 0.0, 0.0, 0.0 ), 0.01 ) *
  193.      roty( 90 ) *
  194.      trans( vector( 11.0, 0.0, 0.25 ) );
  195.  
  196. fuseBack = sFromCrvs( list( c1, c2, c3, c4, c5, c6, c7 ), 3 );
  197. color( fuseBack, yellow );
  198.  
  199. view_mat3d = rotx(-90) * roty(130) * rotx(-35) *
  200.         scale(vector(0.2, 0.2, 0.2)) * trans(vector(0.7, 0.2, 0.0));
  201. view_mat2d = scale( vector( 0.1,  0.1, 0.1 ) ) *
  202.          trans( vector( 0.0, -0.8, 0.0 ) );
  203. interact( list( view_mat3d, fuseBack, fuseFront ) );
  204.  
  205. front_prisa = prisa( fuseFront, SampPerCrv, -0.05, COL, vector( -2.0, 0.2, 0.0 ) );
  206. back_prisa = prisa( fuseBack, SampPerCrv, -0.05, COL, vector( 2.0, 0.2, 0.0 ) );
  207. color(front_prisa, yellow);
  208. color(back_prisa, yellow);
  209. interact( list( view_mat3d, front_prisa, back_prisa ) );
  210.  
  211. front_prisa = prisa( fuseFront, SampPerCrv, 0.05, COL, vector( -2.0, 0.2, 0.0 ) );
  212. back_prisa = prisa( fuseBack, SampPerCrv, 0.05, COL, vector( 2.0, 0.2, 0.0 ) );
  213.  
  214. view_mat2d = scale( vector( 0.15,  0.15, 0.15 ) ) *
  215.          trans( vector( 0.0, -0.8, 0.0 ) );
  216. interact( list( view_mat2d, front_prisa, back_prisa ) );
  217.  
  218. # Animate:
  219.  
  220. b58_prisa2d = 
  221.     prisa( fuseBack, SampPerCrv, 0.05, COL, vector( 0, 0.1, 0 ) ) *
  222.     trans( vector( 0, 4.4, 0 ) ) +
  223.     prisa( fuseFront, SampPerCrv, 0.05, COL, vector( 0, 0.1, 0 ) );
  224. color( b58_prisa2d, red );
  225.  
  226. b58_prisa3d = ( prisa( fuseFront, SampPerCrv, -0.05, COL, vector( 0, 0, 0 ) ) +
  227.             prisa( fuseBack, SampPerCrv, -0.05, COL, vector( 0, 0, 0 ) ) )
  228.           * rotz( 90 ) * trans( vector( 0, 1, 3 ) );
  229. color( b58_prisa3d, magenta );
  230.  
  231. view_mat = rotx(-90) * roty(130) * rotx(-35) *
  232.         scale(vector(0.18, 0.18, 0.18)) *
  233.                 trans(vector(0.9, -0.9, 0.0));
  234.  
  235. built_b58 = nil();
  236. iter_b58 = nil();
  237. morph_step = 0.2;
  238. ViewState("LessIso");
  239. ViewState("LessIso");
  240. view( list( view_mat, b58_prisa2d, b58_prisa3d ), on );
  241. for ( i = 1, 1, sizeof( b58_prisa3d ),
  242.     min_b58 = nth( b58_prisa2d, 1 + sizeof( b58_prisa3d ) - i ):
  243.     max_b58 = nth( b58_prisa3d, i ):
  244.     ffcompat( min_b58, max_b58 ):
  245.     for ( t = 0.0, morph_step, 1.0,
  246.     iter_b58 = smorph( min_b58, max_b58, t ):
  247.     color( iter_b58, yellow ):
  248.     viewobj( iter_b58 ) ):
  249.     snoc( max_b58, built_b58 ):
  250.     color( built_b58, white ):
  251.     view( list( b58_prisa2d, b58_prisa3d, built_b58 ), on ) );
  252. viewclear();
  253. ViewState("MoreIso");
  254. ViewState("MoreIso");
  255.  
  256. #############################################################################
  257. ViewState("MoreIso");
  258. ViewState("MoreIso");
  259. view_mat = save_mat;
  260. resolution = save_res;
  261.